<?php

/**
 * Diese Klasse verwaltet alle Entitäten von Userright
 * 
 * @author mills
 *
 */
class UserrightDAO extends AbstractDAO {
	
	/**
	 * Der Konstruktor stattet die DAO mit einem DB Objekt aus
	 */
	function __construct() {
		parent::__construct('Userright');
		
		{	// Wenn es die Tabelle nicht gibt, dann soll diese erzeugt werden
			$sql = 'CREATE TABLE IF NOT EXISTS '.Userright::$tablename.' (
						ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
						UserID INT UNSIGNED NOT NULL,
    					RightID INT UNSIGNED NOT NULL
   					)';

			$db = DBFactory::getInstance();
			
			// Query vorbereiten
			if (!$stmt = $db->prepare($sql)) {
				// error
				$this->logger->logFile('Database error creating table '.Userright::$tablename.': '. $db->error, LEVEL_ERROR);
				
				return null;
			}

			// Statement ausführen
			if (!$stmt->execute()) {
				// error
				$this->logger->logFile('Statement error creating table '.Userright::$tablename.': '. $stmt->error, LEVEL_ERROR);
				
				return null;
			}

			// Statement beenden
			$stmt->close();
			
			unset($db);
		}
	}
	
	/**
	 * Der Destruktor entfernt die Referen auf das DB Objekt
	 */
	function __destruct() {
		parent::__destruct();
	}
	
	/**
	 * Diese Methode liest alle Entitäten von Userright mit der userid aus der Datenbank
	 * 
	 * @param integer $userid
	 * @return array von Userright wenn vorhanden, sonst null undFehler in error
	 */
	public function getByUserId($userid) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Loading Userrights with userid '". $userid ."' from database...", LEVEL_DEBUG);
		
		// Lade alle Entitäten mit der userid aus der DB
		$entity = $this->em->getRepository('Userright')->findBy(array('UserID' => $userid));
		
		// debug
		$this->logger->logFile(count($entity) > 0 ? "Loading Userright entities with userid '". $userid ."' was successfull." : "No Userright entities found with userid '". $userid ."'.", LEVEL_DEBUG);
		
		return $entity;
	}
	
	/**
	 * Diese Methode liest alle Entitäten von Userright mit der rightid aus der Datenbank
	 * 
	 * @param integer $rightid
	 * @return array von Userright wenn vorhanden, sonst null und  Fehler in error
	 */
	public function getByRightId($rightid) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Loading Userrights with rightid '". $rightid ."' from database...\n", LEVEL_DEBUG);
		
		// Lade alle Entitäten mit der rightid aus der DB
		$entity = $this->em->getRepository('Userright')->findBy(array('RightID' => $rightid));
		
		// debug
		$this->logger->logFile(count($entity) > 0 ? "Loading Userright entities with rightid '". $rightid ."' was successfull." : "No Userright entities found with rightid '". $rightid ."'.", LEVEL_DEBUG);
		
		return $entity;
	}
	
	/**
	 * Prüft ob es ein bestimmtes Recht gibt, wenn ja, wird dieses zurückgegeben
	 * 
	 * @param Userright $userright
	 * @return Userright das Benutzerrecht falls vorhanden, falls nicht null und Fehler in error
	 */
	public function exists($userright) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Checking on Userright '". $userright->get_userid() ." => ". $userright->get_rightid() ."'\n", LEVEL_DEBUG);
		
		// Lade alle Entitäten mit der userid und rightid aus der DB
		$entity = $this->em->getRepository('Userright')->findBy(array('UserID' => $userright->get_userid(), 'RightID' => $userright->get_rightid()));
		
		// debug
		$this->logger->logFile($entity ? "Userright entity does exsist." : "Userright entity does not exsist.", LEVEL_DEBUG);
		
		return $entity ? $entity[0] : false;
	}
	
	public function pre_delete($entity) {
		// TODO
	}
}

?>